﻿
Перем Токены;
Перем Типы;
Перем ТаблицаТокенов;
Перем ТаблицаОшибок;

Процедура Открыть(Парсер, Параметры) Экспорт
	Токены = Парсер.Токены();
	ТаблицаТокенов = Парсер.ТаблицаТокенов();
	ТаблицаОшибок = Парсер.ТаблицаОшибок();
	Типы = Парсер.Типы();
КонецПроцедуры // Открыть()

Функция Закрыть() Экспорт
	Возврат Неопределено;
КонецФункции // Закрыть()

Функция Подписки() Экспорт
	Перем Подписки;
	Подписки = Новый Массив;
	Подписки.Добавить("ПосетитьОператоры");
	Возврат Подписки;
КонецФункции // Подписки()

#Область РеализацияПодписок

Процедура ПосетитьОператоры(Операторы) Экспорт

	Для Каждого Оператор Из Операторы Цикл

		СледующийТокен = ТаблицаТокенов[Оператор.Конец.Индекс + 1];

		Если СледующийТокен.Токен <> Токены.ТочкаСЗапятой И Не СтрНачинаетсяС(Оператор.Тип, "ИнструкцияПрепроцессора") Тогда

			Ошибка("Пропущена точка с запятой", Оператор.Конец);

		КонецЕсли;

	КонецЦикла;

КонецПроцедуры // ПосетитьОператоры()

#КонецОбласти // РеализацияПодписок

Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь)
	Ошибка = ТаблицаОшибок.Добавить();
	Ошибка.Источник = "ДетекторПропущенныхТочекСЗапятой";
	Ошибка.Текст = Текст;
	Ошибка.ПозицияНачала = Начало.Позиция;
	Ошибка.НомерСтрокиНачала = Начало.НомерСтроки;
	Ошибка.НомерКолонкиНачала = Начало.НомерКолонки;
	Если Конец = Неопределено Или Конец = Начало Тогда
		Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина;
		Ошибка.НомерСтрокиКонца = Начало.НомерСтроки;
		Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина;
	Иначе
		Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина;
		Ошибка.НомерСтрокиКонца = Конец.НомерСтроки;
		Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина;
	КонецЕсли;
	Ошибка.ЕстьЗамена = ЕстьЗамена;
КонецПроцедуры